package us.proyecto.canarios.actions.admin;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;
import java.util.ResourceBundle;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Begin;
import org.jboss.seam.annotations.FlushModeType;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.datamodel.DataModel;
import org.jboss.seam.annotations.datamodel.DataModelSelection;
import org.jboss.seam.faces.FacesMessages;

import us.proyecto.canarios.dao.UsuarioDAO;
import us.proyecto.canarios.domain.Usuario;


@Name("confirmaciones")
@Scope(ScopeType.SESSION)
public class ConfirmacionesAction {

    @DataModel("listaPendientes")
    private List<Usuario> listaPendientes;
    @DataModelSelection("listaPendientes")
    private Usuario usuarioSel;

    @In(create = true)
    private UsuarioDAO usuarioDAO;


    @Begin(join = true, flushMode=FlushModeType.MANUAL)
    public void gestion(){
        listaPendientes = usuarioDAO.getListbywhere("pendiente = true");
        if(listaPendientes == null){
            listaPendientes = new ArrayList<Usuario>();
        }
    }

    public void confirmar(){
        usuarioSel.setPendiente(false);
        usuarioDAO.save(usuarioSel);

        String texto;
        String subject;
        SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
        Date date = new Date();
        String correo = "";
        if(usuarioSel.getEsAsociacion()){
            correo = usuarioSel.getAsociacion().getEmail();
        }else{
            correo = usuarioSel.getJuez().getEmail();
        }

        try {
                String fecha = formato.format(date);

                texto = "<h1>"
                                + "<span style='font-family: arial,helvetica,sans-serif;'>"
                                + "Canario"
                                + "</span>"
                                + "</h1>"
                                + "<h4>"
                                + "Activación de cuenta.<"
                                + "/h4>"
                                + "<p>"
                                + "Se ha activado su cuenta, la clave de acceso vinculada a su cuenta de correo "
                                + "<span style='color: rgb(0, 0, 255);'>"
                                + correo
                                + "</span>"
                                + " es:"
                                + "</p>"
                                + "<p>"
                                + "clave: "
                                + usuarioSel.getPass()
                                + "</p>"
                                + "<p>"
                                + "------------"
                                + "</p>"
                                + " <style='margin-left: 10px; margin-right: 10px; float: left; width: 158px; height: 167px;'/>"
                                + "<p>"
                                + "<span style='font-size: 10px;'>"
                                + fecha
                                + "</span>" + "</p>";

                subject = "Activación cuenta Canarios";

           //     EnviarMail(subject, texto);
                listaPendientes.remove(usuarioSel);
                FacesMessages.instance().add("Se ha enviado un correo con la resolución seleccionada");
        } catch (Exception e) {
                FacesMessages.instance().add(
                                "No se pudo enviar el mail de aviso");
        }
    }

    public void rechazar(){
        usuarioDAO.delete(usuarioSel);

        String texto;
        String subject;
        SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
        Date date = new Date();
        String correo = "";
        if(usuarioSel.getEsAsociacion()){
            correo = usuarioSel.getAsociacion().getEmail();
        }else{
            correo = usuarioSel.getJuez().getEmail();
        }

        try {
                String fecha = formato.format(date);

                texto = "<h1>"
                                + "<span style='font-family: arial,helvetica,sans-serif;'>"
                                + "Canario"
                                + "</span>"
                                + "</h1>"
                                + "<h4>"
                                + "Rechazo de cuenta.<"
                                + "/h4>"
                                + "<p>"
                                + "Se ha rechazado la activacion de la cuenta vinculada a su cuenta de correo "
                                + "<span style='color: rgb(0, 0, 255);'>"
                                + correo
                                + "</span>"
                                + " es:"
                                + "</p>"
                                + "<p>"
                                + "------------"
                                + "</p>"
                                + " style='margin-left: 10px; margin-right: 10px; float: left; width: 158px; height: 167px;'/>"
                                + "<p>"
                                + "<span style='font-size: 10px;'>"
                                + fecha
                                + "</span>" + "</p>";

                subject = "Rechazo activacion Canarios";

                EnviarMail(subject, texto);
                listaPendientes.remove(usuarioSel);
                FacesMessages.instance().add("Se ha enviado un correo con la resolución seleccionada");
        } catch (Exception e) {
                FacesMessages.instance().add(
                                "No se pudo enviar el mail de aviso");
        }
    }



    public List<Usuario> getListaPendientes() {
        return listaPendientes;
    }


    public void setListaPendientes(List<Usuario> listaPendientes) {
        this.listaPendientes = listaPendientes;
    }


    public Usuario getUsuarioSel() {
        return usuarioSel;
    }


    public void setUsuarioSel(Usuario usuarioSel) {
        this.usuarioSel = usuarioSel;
    }

    private void EnviarMail(String subject, String texto) {

        Properties props = new Properties();

        String servidorSmtp = ResourceBundle.getBundle("mail").getString(
                        "mail.smtp.host");
        String tls = ResourceBundle.getBundle("mail").getString(
                        "mail.smtp.starttls.enable");
        String puerto = ResourceBundle.getBundle("mail").getString(
                        "mail.smtp.port");
        String usuarioSMTP = ResourceBundle.getBundle("mail").getString(
                        "mail.smtp.user");
        String aunteticacion = ResourceBundle.getBundle("mail").getString(
                        "mail.smtp.auth");
        String pass = ResourceBundle.getBundle("mail").getString("mail.pass");
        String from = ResourceBundle.getBundle("mail").getString("mail.from");

        // Nombre del host de correo, es smtp.gmail.com
        props.setProperty("mail.smtp.host", servidorSmtp);

        // TLS si está disponible
        props.setProperty("mail.smtp.starttls.enable", tls);

        // Puerto de gmail para envio de correos
        props.setProperty("mail.smtp.port", puerto);

        // Nombre del usuario
        props.setProperty("mail.smtp.user", usuarioSMTP);

        // Si requiere o no usuario y password para conectarse.
        props.setProperty("mail.smtp.auth", aunteticacion);

        Session session = Session.getDefaultInstance(props);
        session.setDebug(true);

        MimeMessage message = new MimeMessage(session);

        try {

                // Quien envia el correo
                message.setFrom(new InternetAddress(from));

                // A quien va dirigido
                message.addRecipient(Message.RecipientType.TO, new InternetAddress(
                                "bersker82@gmail.com"));

                // Establecemos el asunto
                message.setSubject(subject);
                // añadimos el texto en formato web
                message.setText(texto, "ISO-8859-1", "html");

                Transport t = session.getTransport("smtp");

                t.connect(usuarioSMTP, pass);
                t.sendMessage(message, message.getAllRecipients());
                t.close();

        } catch (AddressException e) {
                FacesMessages
                                .instance()
                                .add(
                                                "No se pudo enviar email de notificación (dirección incorrecta)");
                e.printStackTrace();
        } catch (MessagingException e) {
                FacesMessages.instance().add(
                                "No se pudo enviar email de notificación");
                // TODO Auto-generated catch block
                e.printStackTrace();
        }
    }


}
